<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
        原型
          原型指的是两个原型属性：prototype(显示原型属性)和__proto__(隐式原型属性)

          所有函数（除了箭头函数以外）都有显示原型属性，他的值是一个对象，这个对象我们叫做原型对象
          原型对象上默认有两个属性：一个constructor，指向函数本身，一个隐式原型属性，指向Object的原型对象

          所有对象都有隐式原型属性，他的值指向其构造函数的显示原型

          特殊情况：
            Object.prototype.__proto__ -> null （原型链的尽头）
            Function.__proto__ -> Function.prototype
        
        原型链
          概念：多个隐式原型属性组成结构就是原型链（隐式原型链）
          作用：用来查找对象属性/方法
          具体规则：
            现在自身属性上找，找到返回
            找不到沿着隐式原型属性找，找到返回
            最终来到Object原型对象上，找不到返回undefined
        
        作用：复用代码    
        应用：
          Vue全局事件总线，我们给Vue的原型对象添加$bus事件总线对象，所以所有组件实例可以通过this访问
          汇总所有API
      */
    </script>
  </body>
</html>
